---
id: errors
title: Camera Errors
sidebar_label: Camera Errors
---

import useBaseUrl from '@docusaurus/useBaseUrl'

<div class="image-container">
  <img width="283" src={useBaseUrl("img/example_error.png")} />
</div>

## Why?

Since the Camera library is quite big, there is a lot that can "go wrong". VisionCamera provides thoroughly typed errors to help you quickly identify the cause and fix the problem.

```ts
switch (error.code) {
  case "device/configuration-error":
    // prompt user
    break
  case "device/microphone-unavailable":
    // ask for permission
    break
  case "capture/recording-in-progress":
    // stop recording
    break
  default:
    console.error(error)
    break
}
```

## Troubleshooting

See [Troubleshooting](troubleshooting) if you're having "weird issues".

## The Error types

The `CameraError` type is a baseclass type for all other errors and provides the following properties:

* `code`: A typed code in the form of `{domain}/{code}` that can be used to quickly identify and group errors
* `message`: A non-localized message text that provides a more information and context about the error and possibly problematic values.
* `cause?`: An `ErrorWithCause` instance that provides information about the cause of the error. (Optional)
  * `cause.message`: The message of the error that caused the camera error.
  * `cause.code?`: The native error's error-code. (iOS only)
  * `cause.domain?`: The native error's domain. (iOS only)
  * `cause.details?`: More dictionary-style information about the cause. (iOS only)
  * `cause.stacktrace?`: A native Java stacktrace for the cause. (Android only)
  * `cause.cause?`: The cause that caused this cause. (Recursive) (Optional)

:::info
See [the `CameraError.ts` file](https://github.com/mrousavy/react-native-vision-camera/blob/main/package/src/CameraError.ts) for a list of all possible error codes
:::

### Runtime Errors

The [`CameraRuntimeError`](/docs/api/classes/CameraRuntimeError) represents any kind of error that occured while mounting the Camera view, or an error that occured during the runtime.

The `<Camera />` UI Component provides an `onError` function that will be invoked every time an unexpected runtime error occured.

```tsx
function App() {
  const onError = useCallback((error: CameraRuntimeError) => {
    console.error(error)
  }, [])

  return <Camera onError={onError} {...cameraProps} />
}
```

### Capture Errors

The [`CameraCaptureError`](/docs/api/classes/CameraCaptureError) represents any kind of error that occured only while taking a photo or recording a video.

```tsx
function App() {
  const camera = useRef<Camera>(null)

  // called when the user presses a "capture" button
  const onPress = useCallback(() => {
    try {
      const photo = await camera.current.takePhoto()
    } catch (e) {
      if (e instanceof CameraCaptureError) {
        switch (e.code) {
          case "capture/file-io-error":
            console.error("Failed to write photo to disk!")
            break
          default:
            console.error(e)
            break
        }
      }
    }
  }, [camera])

  return <Camera ref={camera} {...cameraProps} />
}
```


<br />

#### 🚀 Next section: [Troubleshooting](troubleshooting)
